package com.borya.dao;

import java.util.List;
import java.util.Map;

import com.borya.model.entity.*;
import com.borya.model.db.BannerInfo;
import com.borya.model.db.DeviceIdInfo;
import com.borya.model.db.JobNumberAudit;
import com.borya.model.db.KamengModelConfig;
import com.borya.model.db.Merchant;
import com.borya.model.db.MerchantDetailInfo;
import com.borya.model.db.MerchantLevelConfig;
import com.borya.model.db.ModelInfo;
import com.borya.model.db.RegistOrderInfo;
import com.borya.model.db.SpecialModel;
import com.borya.model.db.TbMerchantPowerLimit;
import com.borya.model.db.User;
import com.borya.model.db.ZtgProtionModelDetail;
import com.borya.model.db.userClientAndRegion;
import com.borya.model.enumcation.MerchantPowerLimit;

public interface UserDAO extends BaseDAO {

	/**
	 * 获取员工信息
	 **/
	User getUser(String userId);

	/**
	 * 获取SDK用户信息
	 **/
	User getSdkUser(String userId, Integer detailType);

	boolean addSdkUser(boolean userExists, boolean merchantExits, SelfRegistering registering);

	/**
	 * 获取员工信息
	 **/
	User getUserByIdCard(String idCard, int detailType);

	/**
	 * 获取员工信息
	 **/
	User getUserByIdCardIsMain(String idCard, int detailType, Integer isMain);

	/**
	 * 获取员工信息
	 **/
	User getUserByPhone(String phone);

	/**
	 * 检查号码是否存在
	 **/
	User getUserByPhone2(String phone);

	/**
	 * 获取员工信息
	 **/
	User getUserByInviteCode(String dealerId);

	/**
	 * 跟新用户信息
	 **/
	boolean updateUser(User user);

	/**
	 * 修改TMSI
	 **/
	boolean updateTmsi(String userId, String curTime);

	/**
	 * 查询用户类型
	 *
	 * @return
	 */
	Merchant getMerchant(String dealerId);

	Object[] getMerchantInfo(String dealerId);

	/**
	 * 跟新用户归属地code
	 *
	 * @param cityCode
	 * @param cityName
	 * @return
	 */
	boolean updateUserCity(String cityCode, String cityName, String userId);

	/**
	 * 跟商户签名
	 *
	 * @return
	 */
	Boolean updateSignAgeeement(String dealerId, String signPic, String signMergePicture);

	/***
	 * 获取代理商的用户信息
	 * 
	 * @param dealerId
	 * @return
	 */
	List<UserDataModel> getUserList(String dealerId);

	/***
	 * 获取代理商的用户信息通过IdCard
	 *
	 * @param idCard
	 * @return
	 */
	List<UserDataModel> getUserDetailListByIdCard(String idCard, Integer detailType);

	boolean bindPhone(String userId, String newPhone);

	MerchantLevelInfo getMerchantLevel(String dealerId);

	/**
	 * 获取商户等级相关配置信息
	 **/
	MerchantLevelConfig getMerchantLevelConfig();

	/**
	 * 检查用户是否为黑名单用户
	 **/
	Boolean checkBlackUser(String userid);

	/**
	 * 删除工号
	 *
	 * @param removeUser
	 *            被删除工号信息
	 * @return
	 */
	Boolean removeUser(User removeUser, User mainUser, String order_id);

	/**
	 * 获取账户余额
	 **/
	Long getLeftFee(String userId);

	/**
	 * 新建工号
	 */
	boolean addUser(JobNumberAudit audit, String invite, Integer auditType, String customer,String livingStatus);

	/**
	 * 生成邀请码
	 **/
	String getInviteCode();

	/**
	 * 根据邀请码查看上级商户信息
	 **/
	Merchant getDealerInfoByInviteCode(String inviteCode);

	/**
	 * 创建游客账户
	 **/
	boolean setVisitor(SelfRegistering s);

	/**
	 * 查询设备号相关信息
	 **/
	DeviceIdInfo getDeviceIdInfo(String deviceid);

	/**
	 * 查询游客资料
	 **/
	SelfRegistering getVisitorInfo(String dealerId);

	/**
	 * 商户激活入审核表
	 **/
	boolean addRegistMerchant(SelfRegistering s);

	/**
	 * 商户激活
	 *
	 * @param s
	 * @param orderId
	 *            激活审核表订单号
	 * @return
	 */
	boolean activeMerchant(SelfRegistering s, String orderId, Map<String, String> baseMap, int detailType);

	/**
	 * 检测用户能否购买设备
	 **/
	Integer checkPowerForModel(String userid);

	/**
	 * 查询设备单价和最大购买数量
	 **/
	KamengModelConfig getPrice();

	/**
	 * 上级商户号没有查到的时候，保存信息
	 *
	 * @return
	 */
	boolean noSuperSetInfo(SelfRegistering s);

	/**
	 * 获取商户售卡模式和折扣模式
	 *
	 * @param dealerId
	 *            推广方
	 * @return
	 */
	ModelInfo getDealerModel(String dealerId);

	// /**
	// * 双11活动新增赠送金额
	// * @return
	// */
	// boolean insertActDeduct(String supDealerId,
	// String inviteCode, String userid, String dealerId, String phone);

	/**
	 * 从审核表查询激活信息
	 *
	 * @param orderId
	 * @return
	 */
	SelfRegistering getRegistInfo(String orderId);

	/**
	 * 获取商户状态
	 *
	 * @return
	 */
	Merchant getMerchantStatus(String dealerId);

	/**
	 * 激活审核失败时 修改表状态
	 *
	 * @param phone
	 * @param devMac
	 * @return
	 */
	boolean updateWhenAuditFail(String phone, String devMac, int beforeStatus);

	/**
	 * @return
	 */
	boolean auditOrder(RegistOrderInfo regisOrder);

	Object[] merchantAttributeInfo(String dealerid);

	/**
	 * 查询欢迎页列表
	 *
	 * @return
	 */
	List<BannerInfo> getBannerList();

	/**
	 * 查询欢迎页列表
	 *
	 * @param bannerIds
	 * @return
	 */
	Map<String, BannerInfo> getBannerList(String bannerIds);

	/**
	 * 查询设备是否参与推广佣金
	 *
	 * @param mac
	 * @return
	 */
	DeviceIdInfo macGetPromotion(String mac);

	/**
	 * 查询老佣金
	 *
	 * @return
	 */
	MerchantProInfo getOldAccount(String dealerId);

	/**
	 * 给予推广佣金
	 *
	 * @param info
	 * @return
	 */
	boolean gavePromotion(MerchantProInfo info, String tbname);

	/**
	 * 创建月表
	 *
	 * @return
	 */
	boolean createTable(String tbName);

	/**
	 * 查询特殊渠道模式
	 *
	 * @param popChannel
	 * @return
	 */
	List<SpecialModel> specialModel(String popChannel);

	/**
	 * 查询特殊渠道模式
	 *
	 * @param popChannel
	 * @return
	 */
	List<SpecialModel> specialModelNoamral(String popChannel);

	/**
	 * 添加特殊商户信息
	 *
	 * @param dealerId
	 * @return
	 */
	boolean addSpecialDealerModel(List<SpecialModel> modelList, String dealerId, String dealerName);

	/**
	 * 添加特殊商户信息
	 *
	 * @param dealerId
	 * @return
	 */
	boolean addSpecialDealerModelNoamal(List<SpecialModel> modelList, String dealerId, String dealerName);

	/**
	 * 查询自推广佣金模式详情
	 *
	 * @param deviceInfo
	 * @return
	 */
	ZtgProtionModelDetail getIncomeModelDetail(DeviceIdInfo deviceInfo);

	/**
	 * 查询商户成功购买设备填写信息
	 *
	 * @param merchantId
	 * @return
	 */
	Map<String, String> getBuyModelInfo(String merchantId, Map<String, String> tables);

	/**
	 * 记录用户签订协议
	 * 
	 * @param merchantId
	 * @return
	 */
	boolean addMerchantDetail(String merchantId);

	/**
	 * 更新用户协议
	 *
	 * @param merchantId
	 * @return
	 */
	boolean updateMerchantDetail(String merchantId);

	/**
	 * 获取用户是否签订协议
	 * 
	 * @param merchantId
	 * @return
	 */
	MerchantDetailInfo getMerchantDetail(String merchantId);

	/**
	 * 获取商户信息通过detailType
	 * 
	 * @param detailType
	 * @return
	 */
	Merchant getByDetailTypeAndIdentityCard(Integer detailType, String identityCard, String userid);

	// 更改门店使用地区、用户使用人信息内部专用
	List<userClientAndRegion> getUserClient();

	List<userClientAndRegion> getUserRegion();

	boolean updateUserClientDetail(List<userClientAndRegion> list);

	boolean updateUserRegion(List<userClientAndRegion> list);

	boolean clearTmsi();
	// 更改门店使用地区、用户使用人信息内部专用

	/**
	 * 获取添加子工号审核列表
	 */
	List<JobNumberAuditModel> getJobNumberAuditList(String param, Integer type);

	/**
	 * 获取添加子工号审核列表（通过身份证号码）
	 */
	List<JobNumberAuditModel> getJobNumberAuditListByIdCard(String idCard);

	/**
	 * 获取用户详情
	 */
	UserDetailModel getUserDetailList(String userId);

	/**
	 * 获取管理日子列表
	 */
	List<ManageLogModel> getManageLogList(String dealerId);

	/**
	 * 添加审核数据到工号审核表
	 */
	boolean addJobNumberAudit(User user, JobNumberAudit audit);

	/**
	 * 获取工号审核表信息通过身份证号码
	 */
	JobNumberAudit getJobNumAuditByIdCard(String idCard);

	/**
	 * 获取工号审核表信息通过订单号码
	 */
	JobNumberAudit getJobNumAuditByOrderId(String orderId);

	/**
	 * 新增限制权限
	 * 
	 * @param limitList
	 * @return
	 */
	boolean addLimitPower(List<TbMerchantPowerLimit> limitList);

	/**
	 * 查询商户是否有限制权限
	 * 
	 * @param dealerId
	 * @param limit
	 * @return
	 */
	TbMerchantPowerLimit searchPowerLimit(String dealerId, MerchantPowerLimit limit);

	/**
	 * 获取用户关系类型列表
	 */
	List<RelationModel> getRelationTypeList();

    /**
     * 获取用户信息通过用户ID
     */
    SonJobNumProtocolModel getSonJobNumProtocol(String userId);

    Merchant getMerchantById(String merchantId);

    SdkAppConfModel getAppIdByDetailType(Integer detailType);
}
